package sanrenxing.right.servlet;
import com.google.gson.Gson;
import sanrenxing.right.biz.UserBiz;
import sanrenxing.right.entity.UserEntity;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;

@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
    UserBiz userBiz =new UserBiz();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收来自客户端发送的方法名
        String method=request.getParameter("method");
        if(method.equals("insertUser")) {//增加用户
            insertUser(request,response);
        }
        else if(method.equals("updateUser")) {//修改用户
            updateUser(request,response);
        }
        if(method.equals("deleteUser")) {//删除用户
            deleteUser(request,response);
        }
        if(method.equals("selectUser")) {//查询显示用户数据
            selectUser(request,response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    /**
     * 增加的服务类方法
     * @param request 请求对象
     * @param response 响应对象
     * @throws ServletException
     * @throws IOException
     */
    protected void insertUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收客户数据的用户编号
        String strUserId=request.getParameter("userId");
        //定义一个保存用户编号的int
        int userId=0;
        //判断用户编号是否为空
        if(strUserId!=null && !strUserId.equals("")) {
            //如果用户编号不为空则转换为int类型
            userId=Integer.parseInt(strUserId);
        }
        //接收用户账号
        String userName=request.getParameter("userName");
        //接收用户密码
        String userPwd=request.getParameter("userPwd");
        //接收角色编号
        String strRoleId=request.getParameter("roleId");
        //定义一个保存角色编号的int
        int roleId=0;
        //判断角色编号是为空
        if(strRoleId!=null && !strRoleId.equals("")) {
            //不为空则转换为int类型
            roleId=Integer.parseInt(strRoleId);
        }
        //传参创建用户实体
        UserEntity userEntity=new UserEntity(userId,userName,userPwd,roleId);
        //通过调用业务层方法将用户数据插入到数据库，返回布尔类型，true:插入成功 false:插入失败
        boolean flag = userBiz.insertUser(userEntity);
        //设置响应字符集
        response.setCharacterEncoding("utf-8");
        //创建输出流对象
        PrintWriter out = response.getWriter();
        //返回一个数字状态到0或1到前端，通过三元运算符判断 true:1,false:0
        out.println(flag?"1":"0");
        //清空流管道
        out.flush();
        //关闭流
        out.close();

    }
    /**
     * 修改的服务类方法
     * @param request 请求对象
     * @param response 响应对象
     * @throws ServletException
     * @throws IOException
     */
    protected void updateUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收客户数据的用户编号
        String strUserId=request.getParameter("userId");
        //定义一个保存用户编号的int
        int userId=0;
        //判断用户编号是否为空
        if(strUserId!=null && !strUserId.equals("")) {
            //如果用户编号不为空则转换为int类型
            userId=Integer.parseInt(strUserId);
        }
        //接收用户账号
        String userName=request.getParameter("userName");
        //接收用户密码
        String userPwd=request.getParameter("userPwd");
        //接收角色编号
        String strRoleId=request.getParameter("roleId");
        //定义一个保存角色编号的int
        int roleId=0;
        //判断角色编号是为空
        if(strRoleId!=null && !strRoleId.equals("")) {
            //不为空则转换为int类型
            roleId=Integer.parseInt(strRoleId);
        }
        //传参创建用户实体
        UserEntity userEntity=new UserEntity(userId,userName,userPwd,roleId);
        //数据层对象调用修改用户方法，返回布尔值
        boolean flag = userBiz.updateUser(userEntity);
        //设置响应字符集
        response.setCharacterEncoding("utf-8");
        //创建输出流对象
        PrintWriter out = response.getWriter();
        //发送状态到客户端
        out.println(flag?"1":"0");
        //清空管道
        out.flush();
        //关闭流
        out.close();

    }
    /**
     * 删除的服务类方法
     * @param request 请求对象
     * @param response 响应对象
     * @throws ServletException
     * @throws IOException
     */
    protected void deleteUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收来自客户端的用户编号
        String userId=request.getParameter("userId");
        //将编号分割保存到字符串数组当中
        String ids[]=userId.split(",");
        //遍历字符串数据
        for (String strId : ids) {
            //判断不为空
            if(strId!=null && !strId.equals("")){
                //转换类型
                int id=Integer.parseInt(strId);
                //调用数据层方法进行删除，传参用户id
                userBiz.deleteUser(id);
            }
        }
    }
    /**
     * 查询的服务类方法
     * @param request 请求对象
     * @param response 响应对象
     * @throws ServletException
     * @throws IOException
     */
    protected void selectUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到请求的参数
        String userName=request.getParameter("userName");
        //接收页数
        String strPage=request.getParameter("page");
        //定义保存页数的编号
        int page=1;
        //判断不为空
        if(strPage!=null && !strPage.equals("")){
            //转换类型后保存
            page = Integer.parseInt(strPage);
        }
        //接收行数
        String limit=request.getParameter("limit");
        //定义保存行数的变量
        int pageSize=10;
        //判断不为空
        if(limit!=null && !limit.equals("")){
            //转换类型后保存
            pageSize = Integer.parseInt(limit);
        }
        //调用数据层方法查询用户，返回集合
        List<UserEntity> userList = userBiz.selectUser(userName,page,pageSize);
        //调用数据层方法接收总行数
        int count=userBiz.count(userName);
        //创建map集合
        HashMap userMap=new HashMap();
        userMap.put("code",0);
        userMap.put("msg","");
        userMap.put("count",count);
        userMap.put("data",userList);
        //创建gson对象
        Gson gson= new Gson();
        //序列化map集合为json数据
        String strJson = gson.toJson(userMap);
        //设置响应字符集
        response.setCharacterEncoding("utf-8");
        //创建输出流对象
        PrintWriter out = response.getWriter();
        //发送数据
        out.println(strJson);
        //关闭流管道
        out.flush();
        //关闭流
        out.close();
    }
}
